    BOI.11. (Clieni). O firm[ ocup[ zece etaje ale unei cl[diri, numerotate
de la 1 la 10. La terminarea lucrului, valetul John trebuie s[ transporte comisioane
ntre etaje. El pleac[ de la etajul 1 i revine la etajul 1. La un transport ntre etaje
(urcate sau coborte) duce un singur comision de la un client la altul, sau nu duce
nimic.
Problem[:
           Scriei un program care g[sete num[rul minim m de etaje urcate pentru a
deservi toi clienii (ordinea de deservire nu conteaz[).
Intrare: Comisioanele ntre clienii care trebuiesc deservii sunt date ntr-un fiier
text dup[ cum urmeaz[:
Pe prima linie: k (k50)  - num[rul comisioanelor;
Pe fiecare din urm[toarele k linii: dou[ numere care simbolizeaz[ etajul clientului
expeditor, respectiv etajul clientului destinatar ntre care are loc transportul
comisionului; de exemplu: 
7
1 10
3 2
4 3
6 7
8 9
3 4
4 3
Ieirea: Ieirea este standard (ecran) i conine num[rul m;
Pentru exemplul anterior ieirea este:
12
Observaie: John poate l[sa eventual un pachet la un etaj, pachet pe care s[-l ia mai
trziu.
============================================
          BOI 11. (Gheorghi[ Valentin, Ploieti)
Se folosete un backtracking recursiv.
program clienti;
uses crt;
var f:text;
    n:byte;
    a:array[1..50,1..2] of byte;
    salv:array[1..50] of byte;
    min,i:integer;
-------------------------------------------------------
procedure recurs(poz,suma,etaj:integer);
var i,j,s:integer;
    val:boolean;
 begin
   if poz=n+1 then min:=suma;
              else for i:=1 to n do begin
      val:=true; s:=suma;
      for j:=1 to poz-1 do
        if i=salv[j] then val:=false;
        if a[i,1]>etaj then s:=s+a[i,1]-etaj;
        if a[i,1]<a[i,2] then s:=s+a[i,2]-a[i,1];
        if s>=min then val:=false;
        if val then begin
           salv[poz]:=i; recurs(poz+1,s,a[i,2]);
                    end;
                                   end;
end;
--------------------------------------------------------
begin
  clrscr;
  assign(f,'input.3'); reset(f); readln(f,n);
  for i:=1 to n do readln(f,a[i,1],a[i,2]);
  close(f);
  min:=n*9; recurs(1,0,1);
 writeln(min);
 repeat until keypressed;
end.
-----------------------------------------
